﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AgileSaude.Business;
using AgileSaude.Entities;
using System.Reflection;

namespace AgileSaude.Web.Compras
{
    public partial class ComprarConsulta : PageBase
    {
        MedicoFacade MedicosFacade = new MedicoFacade();

        private string sortExpression
        {
            get { return ViewState["sortExpression"].ToString(); }
            set { ViewState["sortExpression"] = value; }
        }

        private int sortDirection
        {
            get { return Convert.ToInt32(ViewState["sortDirection"]); }
            set { ViewState["sortDirection"] = value; }
        }

        public int IdMedico
        {
            get { return Convert.ToInt32(ViewState["IdMedico"]); }
            set { ViewState["IdMedico"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.sortExpression = "Nome";
                this.sortDirection = 1;

                Resultado resultado = new Resultado();

                CidadeEntities FiltroCidade = new CidadeEntities();

                ddlCidade.DataTextField = "Nome";
                ddlCidade.DataValueField = "IdCidade";

                ddlCidade.DataSource = new CidadeFacade().Listar(FiltroCidade, ref resultado).OrderBy(x => x.Nome);
                ddlCidade.DataBind();

                ddlCidade.Items.Insert(0, "");
            }
        }

        protected void ddlCidade_OnSelectedIndexChanged(Object sender, EventArgs e)
        {
            lblMedico.Visible = false;
            gvMedicos.Visible = false;

            if (ddlCidade.SelectedValue != "")
            {
                Resultado resultado = new Resultado();

                EspecialidadeEntities FiltroEspecialidade = new EspecialidadeEntities();

                ddlEspecialidade.DataTextField = "Descricao";
                ddlEspecialidade.DataValueField = "IdEspecialidade";

                ddlEspecialidade.DataSource = new EspecialidadeFacade().Listar(FiltroEspecialidade, ref resultado).OrderBy(x => x.Descricao);
                ddlEspecialidade.DataBind();

                ddlEspecialidade.Items.Insert(0, "");
                ddlEspecialidade.Visible = true;
                lblEspecialidade.Visible = true;
            }
            else
            {
                ddlEspecialidade.Visible = false;
                lblEspecialidade.Visible = false;
            }
        }

        protected void ddlEspecialidade_OnSelectedIndexChanged(Object sender, EventArgs e)
        {
            if (ddlEspecialidade.SelectedValue != "")
            {
                PreencheGrid();

                lblMedico.Visible = true;
                gvMedicos.Visible = true;
            }
            else
            {
                lblMedico.Visible = false;
                gvMedicos.Visible = false;
            }
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Compras/Comprar.aspx", false);
        }

        protected void gvMedicos_Sorting(object sender, GridViewSortEventArgs e)
        {
            if (sortExpression != e.SortExpression)
                sortDirection = 1; //ASC
            else
                sortDirection *= -1; //DESC

            sortExpression = e.SortExpression;
            PreencheGrid();
        }

        protected void gvMedicos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "Comprar":
                    this.IdMedico = Convert.ToInt32(gvMedicos.DataKeys[int.Parse(e.CommandArgument.ToString())]["IdMedico"].ToString());
                    //Server.Transfer("ComprarConsultaResumo.aspx", false);
                    Response.Redirect("ComprarConsultaResumo.aspx?idMedico=" + this.IdMedico, false);
                    break;
                default:
                    break;
            }
        }

        protected void gvMedicos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    LinkButton lnkVisualizar = e.Row.FindControl("lnkVisualizar") as LinkButton;
                    lnkVisualizar.CommandArgument = ((MedicoEntities)(e.Row.DataItem)).idMedico.ToString();

                    LinkButton lnkComprar = e.Row.FindControl("lnkComprar") as LinkButton;
                    lnkComprar.CommandArgument = e.Row.RowIndex.ToString();
                    ((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(lnkComprar);

                    //lnkComprar.OnClientClick = "return confirm('Comprar consulta com o(a) Dr(a) " + ((MedicoEntities)e.Row.DataItem).Nome + "?');";
                    lnkComprar.CommandName = "Comprar";
                    lnkComprar.ToolTip = "Clique aqui para comprar uma consulta.";
                }
            }
            catch
            {
                // Response.Redirect("~/sessaoExpirada.aspx", true);
            }
        }

        protected void gvMedicos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvMedicos.PageIndex = e.NewPageIndex;
            PreencheGrid();
        }

        private void OrdenarLista(ref List<MedicoEntities> listaMedico)
        {
            listaMedico.Sort(delegate(MedicoEntities a1, MedicoEntities a2)
            {
                Type t = typeof(MedicoEntities);
                PropertyInfo prop = t.GetProperty(sortExpression);
                object u1Value = prop.GetValue(a1, null);
                object u2Value = prop.GetValue(a2, null);
                return ((IComparable)u1Value).CompareTo(((IComparable)u2Value)) * sortDirection;
            });
        }

        private void PreencheGrid()
        {
            Resultado resultado = new Resultado();
            MedicoEntities filtro = new MedicoEntities();
            int codigo;
            if (int.TryParse(ddlCidade.SelectedValue, out codigo))
                filtro.idCidade = codigo;
            else
                return;

            if (int.TryParse(ddlEspecialidade.SelectedValue, out codigo))
                filtro.idEspecialidade = codigo;
            else
                return;

            filtro.Clinica = false;

            List<MedicoEntities> listaMedico = MedicosFacade.ListarMedicos(filtro, ref resultado);

            if (resultado.Sucesso)
            {
                ((Label)Master.FindControl("lblMensagem")).Visible = false;
                OrdenarLista(ref listaMedico);
                gvMedicos.DataSource = listaMedico;
                gvMedicos.DataBind();
                gvMedicos.Visible = true;
            }
            else
            {
                gvMedicos.Visible = false;
                ((Label)Master.FindControl("lblMensagem")).Text = resultado.Mensagens[0].Descricoes[0];
                ((Label)Master.FindControl("lblMensagem")).CssClass = "mensagem-vermelho";
                ((Label)Master.FindControl("lblMensagem")).Visible = true;
            }
        }

        protected void lnkVisualizar_Click(object sender, EventArgs e)
        {
            LinkButton lnkBtn = (sender as LinkButton);
            IdMedico = Int32.Parse(lnkBtn.CommandArgument);

            MedicoEntities Medico = MedicosFacade.GetMedico(IdMedico);

            lblNome.Text = Medico.Nome;
            lblEmail.Text = Medico.Email;
            lblEndereco.Text = Medico.Endereco;
            lblBairro.Text = Medico.Bairro;
            lblCidadeContent.Text = Medico.CidadeNome;
            lblEspecialidadeContent.Text = Medico.CidadeNome;
            lblCEP.Text = Medico.CEP;
            lblBreveCV.Text = Medico.BreveCV;
            lblTel1.Text = Medico.Telefone1;
            lblTel2.Text = Medico.Telefone2;

            imgMedico.ImageUrl = "~/ImageMedico/" + Medico.idMedico.ToString() + ".jpg";

            //string script = "$dvConsulta.jqmShow();";

            string script = "$('#dvConsulta').modal('show');";
            ScriptManager.RegisterStartupScript(this, this.GetType(), "abre", script, true);
        }

        protected void btnFechar_Click(object sender, EventArgs e)
        {
            string script = "$dvConsulta.jqmHide();";
            ScriptManager.RegisterStartupScript(this, this.GetType(), "abre", script, true);
        }
    }


}